package org.logsin37.tool.eurekamanager.infra.repository;

import org.logsin37.tool.eurekamanager.domain.entity.Eureka;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

/**
 * Eureka Repository
 *
 * @author logsin37 2020/01/20 16:32
 */
public interface EurekaRepository {

    String KEY = "eureka-manage:eureka";

    /**
     * 列出所有已注册的Eureka
     *
     * @return 出所有已注册的Eureka
     */
    Flux<Eureka> listAllEureka();

    /**
     * 注册Eureka
     *
     * @param eureka eureka信息
     * @return 处理结果
     */
    Mono<Object> saveEureka(Eureka eureka);

    /**
     * 根据Code查询Eureka信息
     *
     * @param code code
     * @return Eureka信息
     */
    Mono<Eureka> getEurekaInfoByCode(String code);

    /**
     * 根据Code删除Eureka信息
     *
     * @param code code
     * @return 删除结果
     */
    Mono<Void> removeEurekaByCode(String code);

    /**
     * Eureka Code是否存在
     * @param code code
     * @return 是否存在
     */
    Mono<Boolean> eurekaCodeExists(String code);

}
